From 746a5c36a58e6a19625f9234acb5cb768bd6538e Mon Sep 17 00:00:00 2001 From: Tor Lillqvist Date: Wed, 8 Feb 2006 17:32:50 +0000 Subject: [PATCH] Consistenly use assign_object() when assigning GdkWindow pointers so that 2006-02-08 Tor Lillqvist * gdk/win32/gdkevents-win32.c (gdk_pointer_grab) (gdk_display_pointer_ungrab, gdk_keyboard_grab) (gdk_display_keyboard_ungrab): Consistenly use assign_object() when assigning GdkWindow pointers so that the ref counting doesn't get off whack. (handle_stuff_while_moving_or_resizing): Don't use deprecated API. (gdk_event_translate) : When the pointer is grabbed with owner_events FALSE, generate enter and leave events only for the grab window. (#321054) --- ChangeLog | 14 ++++++++++++++ ChangeLog.pre-2-10 | 14 ++++++++++++++ gdk/win32/gdkevents-win32.c | 29 ++++++++++++++++++++++------- 3 files changed, 50 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index 3718f16b68..b2a7c437c6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,17 @@ +2006-02-08 Tor Lillqvist + + * gdk/win32/gdkevents-win32.c (gdk_pointer_grab) + (gdk_display_pointer_ungrab, gdk_keyboard_grab) + (gdk_display_keyboard_ungrab): Consistenly use assign_object() + when assigning GdkWindow pointers so that the ref counting doesn't + get off whack. + + (handle_stuff_while_moving_or_resizing): Don't use deprecated API. + + (gdk_event_translate) : When the pointer is grabbed + with owner_events FALSE, generate enter and leave events only for + the grab window. (#321054) + 2006-02-08 Kristian Rietveld * gtk/gtktreemodelfilter.c (gtk_tree_model_filter_ref_path), diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 3718f16b68..b2a7c437c6 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,17 @@ +2006-02-08 Tor Lillqvist + + * gdk/win32/gdkevents-win32.c (gdk_pointer_grab) + (gdk_display_pointer_ungrab, gdk_keyboard_grab) + (gdk_display_keyboard_ungrab): Consistenly use assign_object() + when assigning GdkWindow pointers so that the ref counting doesn't + get off whack. + + (handle_stuff_while_moving_or_resizing): Don't use deprecated API. + + (gdk_event_translate) : When the pointer is grabbed + with owner_events FALSE, generate enter and leave events only for + the grab window. (#321054) + 2006-02-08 Kristian Rietveld * gtk/gtktreemodelfilter.c (gtk_tree_model_filter_ref_path), diff --git a/gdk/win32/gdkevents-win32.c b/gdk/win32/gdkevents-win32.c index 089673bc33..e47d8fd73c 100644 --- a/gdk/win32/gdkevents-win32.c +++ b/gdk/win32/gdkevents-win32.c @@ -585,7 +585,7 @@ gdk_pointer_grab (GdkWindow *window, if (p_grab_window != NULL && p_grab_window != window) generate_grab_broken_event (p_grab_window, FALSE, window); - p_grab_window = window; + assign_object (&p_grab_window, window); if (p_grab_cursor != NULL) { @@ -642,7 +642,7 @@ gdk_display_pointer_ungrab (GdkDisplay *display, /* FIXME: Generate GDK_CROSSING_UNGRAB events */ - p_grab_window = NULL; + assign_object (&p_grab_window, NULL); if (p_grab_cursor != NULL) { if (GetCursor () == p_grab_cursor) @@ -759,7 +759,7 @@ gdk_keyboard_grab (GdkWindow *window, if (k_grab_window != NULL && k_grab_window != window) generate_grab_broken_event (k_grab_window, TRUE, window); - k_grab_window = window; + assign_object (&k_grab_window, window); if (!k_grab_owner_events) { @@ -824,7 +824,7 @@ gdk_display_keyboard_ungrab (GdkDisplay *display, } } - k_grab_window = NULL; + assign_object (&k_grab_window, NULL); } gboolean @@ -2132,8 +2132,8 @@ static void handle_stuff_while_moving_or_resizing (void) { int arbitrary_limit = 1; - while (g_main_pending () && arbitrary_limit--) - g_main_iteration (FALSE); + while (g_main_context_pending (NULL) && arbitrary_limit--) + g_main_context_iteration (NULL, FALSE); } static VOID CALLBACK @@ -2749,7 +2749,22 @@ gdk_event_translate (MSG *msg, GdkWindow *real_window = find_real_window_for_grabbed_mouse_event (window, msg); if (real_window != current_window) - synthesize_crossing_events (real_window, GDK_CROSSING_NORMAL, msg); + { + if (p_grab_owner_events) + { + synthesize_crossing_events (real_window, GDK_CROSSING_NORMAL, msg); + } + else if (current_window == p_grab_window) + { + synthesize_leave_event (p_grab_window, msg, GDK_CROSSING_NORMAL, GDK_NOTIFY_ANCESTOR); + assign_object (¤t_window, _gdk_root); + } + else if (real_window == p_grab_window) + { + synthesize_enter_event (p_grab_window, msg, GDK_CROSSING_NORMAL, GDK_NOTIFY_ANCESTOR); + assign_object (¤t_window, p_grab_window); + } + } } else { -- 2.30.2